package org.management.base;

import tk.mybatis.mapper.entity.Example;
import java.util.List;
import java.util.Map;

/**
 * @title: BaseService
 * @description: 通用接口
 * @author: jiangyan
 * @date:  2019/1/28
 */
public interface BaseService<T> {
	/**
	 * 根据key查询对应实体数据
	 * @param key 实体id
	 * @return T 实体数据
	 */
	T selectByKey(Object key);

	/**
	 * 获取实体未被删除数据
	 * 默认 isDelete 字段 0
	 * @return 实体数据集
	 */
	List<T> selectAll();

	/**
	 * 根据实体数据获取实体数据
	 * 默认 isDelete 字段 0
	 * @return 实体数据集
	 */
	List<T> select(T entity);

    /**
     * 根据实体数据获取一条实体数据
     * 默认 isDelete 字段 0
     * @return 实体数据集
     */
    T selectOne(T entity);

	/**
	 * 根据实体条件查询数据 使用=进行匹配
	 * @param map 键值对查询条件
	 * @return 实体数据集
	 */
	List<T> selectByExample(Map<String,Object> map);
	/**
	 * 根据实体条件查询数据 可以自定义条件进行匹配
	 * @param  example Example对象
	 * @return 实体数据集
	 */
	List<T> selectByExample(Example example);
	/**
	 * 新增实体数据
	 * @param entity 实体
	 * @return 是否成功 1成功 0失败
	 */
	int save(T entity);
	/**
	 * 删除实体数据
	 * @param key 主键id
	 * @return int
	 */
	int delete(Object key);
	/**
	 * 修改所有数据
	 * @param entity 实体数据
	 * @return 是否成功 1成功 0失败
	 */
	int updateAll(T entity);
	/**
	 * 修改所有不为空的数据
	 * @param entity 实体数据
	 * @return 是否成功 1成功 0失败
	 */
	int updateNotNull(T entity);

	/**
	 * 根据实体条件查询总数
	 * @param entity 实体数据
	 * @return 是否成功 1成功 0失败
	 */
	int selectCount(T entity);
}
